const state = {
  items: []
}
//getters
const getters = {
  //获取购物车商品
  cartProducts: (state, getters, rootState) => {
    return state.items.map(({id,quantity}) => {
      const product = rootState.production.all.find(product=>product.id===id)
      return {
        ...product,
        quantity
      }
    })
  },

  // 所有购物车商品价格总和
  cartTotalPrice:(state,getters) => {
    return getters.cartProducts.reduce((total,product) => {
      return total+product.price*product.quantity
    },0)
  }
}
const actions = {
  // 添加购物车
  //【注意】这里没有异步，为何要用 actions ？？？—— 因为要整合多个 mutation
  //        mutation 是原子，其中不可再进行 commit ！！！
  addProductToCart({state,commit}, product){
    const cartItem = state.items.find(item => item.id === product.id)
    if(cartItem){
      commit('incrementItemQuantity', cartItem)
    }else{
      commit('pushProductToCart', { id: product.id })
    }
    // remove 1 item from stock 减少库存
    commit('production/decrementProductInventory', { id: product.id }, { root: true })
  },
  delProductFromCart({state,commit}, product){
    const prd = state.items.find(item => item.id === product.id)
    if (prd == null) {
        return
    }
    // 数量减一 // 如果数量减少到了 0
    commit('deleteProductFormCart', prd)
  }

}
// mutations
const mutations = {
  // 商品初次添加到购物车
  pushProductToCart(state, { id }){
    state.items.push({
      id,
      quantity: 1
    })
  },
  // 商品再次被添加到购物车，增加商品数量
  incrementItemQuantity (state, { id }) {
    const cartItem = state.items.find(item => item.id === id)
    cartItem.quantity++
  },
  // 设置购物车数据
  setCartItems (state, { items }) {
    state.items = items
  },
  // 从购物车减少数量
  deleteProductFormCart(state, { id }){
    const cartItem = state.items.find(item => item.id === id)
    cartItem.quantity--
    // 如果数量减少到了 0
    if (cartItem.quantity <= 0) {
      state.items = state.items.filter(
          item => item.id !== id
      )
  }
  }
}
export default {
  namespaced: true,
  state,
  getters,
  actions,
  mutations
}

